package OOP.InnerClass;

public class Local_Inner_Class {
    public static void main(String[] args) {
        Outer outer = new Outer();
        outer.m2();
    }
}

class Outer{
    private int x = 2;
    private int y = 3;
    private void m1(){
        System.out.println("outer m1");
    };
    public void m2(){
        //不能添加访问修饰符，因为它的地位就是一个局部变量。局部变量是不能使用修饰符的。
        //但是可以使用final修饰，因为局部变量也可以使用final
        final class Inner{
            int y = 100;
            void m3(){
                //可以直接访问外部类的所有成员，包含私有的
                System.out.println("outer X=" + x);
                //如果外部类和局部内部类的成员重名时，默认遵循就近原则，
                //如果想访问外部类的成员，则可以使用（外部类名.this.成员）去访问
                System.out.println("outer Y=" + Outer.this.y);
                System.out.println("Inner Y=" + y);
                //局部内部类访问外部类的成员 [访问方式：直接访问]
                m1();
            };
        }
        //外部类访问局部内部类的成员
        //访问方式：创建对象，再访问（注意：必须在作用域内）
        Inner inner = new Inner();
        inner.m3();
    }
}
